應用啟動過程中可能需要一些敏感信息,比如資料庫的使用者名稱、密碼或者密鑰。將這些信息直接保存在容器中顯然不妥,Kubernetes提供的解決方案是Secret。
Secret會以加密的方式存儲數據,避免了直接在配置文件中保存敏感信息。 Secret會以Volume的形式被mount到Pod,容器可通過文件的方式使用Secret中的敏感數據;此外,容器也可以環境變量的方式使用這些數據。
Secret可通過命令行或YAML創建。比如希望Secret中包含如下信息:使用者名稱root、密碼secret。
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret-demo
data:
username: YWRtaW4=
password: c2VjcmV0
部屬secret後,將secret掛載到pod上
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
spec:
containers:
- name: pod-demo
image: ubuntu:20.04
args: [bash, -c, 'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done']
volumeMounts:
- name: secret-volume
mountPath: /etc/secret
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: secret-demo
透過 kubectl exec 進入pod-demo,可以在/etc/secret發現password和username
root@pod-demo:/# cat /etc/secret/password
secretroot@pod-demo:/# cat /etc/secret/username
adminroot@pod-demo:/#